home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / a3ddem1a / engine.bas < prev    next >
BASIC Source File  |  1999-05-17  |  3KB  |  138 lines

  1. Attribute VB_Name = "Engine"
  2. Public Ver(5000, 2) As Single
  3. Public TempV(5000, 2) As Single
  4. Public Lin(5000, 5) As Single
  5. Public Sa As Double, TransX As Double, TransY As Double
  6. Public TransZ As Double, RotX As Double, RotY As Double, RotZ As Double
  7. Public Zm As Double, VerNum As Double, LineNum As Double
  8. Public ViewDis As Double
  9. Public ZCenter(5000) As Double
  10. Public XOrigin As Double, YOrigin As Double
  11.  
  12. Public Sub Change()
  13. Convert
  14. Sca (Sa)
  15. Translate (TransX), (TransY), (TransZ)
  16. Rotate (RotX), (RotY), (RotZ)
  17. Zoom (Zm)
  18. Transform
  19. SortZ
  20. ImageView
  21. End Sub
  22. Public Sub Convert()
  23. Dim a, b
  24. For a = 0 To VerNum
  25. For b = 0 To 2
  26. TempV(a, b) = Ver(a, b)
  27. Next b, a
  28. End Sub
  29. Public Sub Sca(S As Double)
  30. Dim a, b
  31. For a = 0 To VerNum
  32. For b = 0 To 2
  33. TempV(a, b) = TempV(a, b) * S
  34. Next b, a
  35. End Sub
  36. Public Sub Translate(X As Double, Y As Double, Z As Double)
  37. Dim a
  38. For a = 0 To VerNum
  39. TempV(a, 0) = TempV(a, 0) + X
  40. TempV(a, 1) = TempV(a, 1) + Y
  41. TempV(a, 2) = TempV(a, 2) + Z
  42. Next a
  43. End Sub
  44. Public Sub Rotate(X As Double, Y As Double, Z As Double)
  45. Dim Xn As Double, Yn As Double, Zn As Double
  46. Xn = X * (3.141592654 / 180)
  47. Yn = Y * (3.141592654 / 180)
  48. Zn = Z * (3.141592654 / 180)
  49. Dim a, X1 As Double, Y1 As Double, Z1 As Double
  50. For a = 0 To VerNum
  51. X = TempV(a, 0): Y = TempV(a, 1): Z = TempV(a, 2)
  52. X1 = X * Cos(Zn) - Y * Sin(Zn)
  53. Y1 = Y * Cos(Zn) + X * Sin(Zn)
  54. Z1 = Z
  55. TempV(a, 0) = X1: TempV(a, 1) = Y1: TempV(a, 2) = Z1
  56.  
  57. X = TempV(a, 0): Y = TempV(a, 1): Z = TempV(a, 2)
  58. Y1 = Y * Cos(Xn) - Z * Sin(Xn)
  59. Z1 = Y * Sin(Xn) + Z * Cos(Xn)
  60. X1 = X
  61. TempV(a, 0) = X1: TempV(a, 1) = Y1: TempV(a, 2) = Z1
  62.  
  63. X = TempV(a, 0): Y = TempV(a, 1): Z = TempV(a, 2)
  64. Z1 = Z * Cos(Yn) - X * Sin(Yn)
  65. X1 = Z * Sin(Yn) + X * Cos(Yn)
  66. Y1 = Y
  67. TempV(a, 0) = X1: TempV(a, 1) = Y1: TempV(a, 2) = Z1
  68.  
  69. Next a
  70. End Sub
  71. Public Sub Zoom(Z As Double)
  72. Dim a
  73. For a = 0 To VerNum
  74. TempV(a, 2) = TempV(a, 2) + Z
  75. Next a
  76. End Sub
  77. Public Sub Transform()
  78. Dim X As Double, Y As Double, Z As Double
  79. Dim a
  80. For a = 0 To VerNum
  81. X = TempV(a, 0): Y = TempV(a, 1): Z = TempV(a, 2)
  82. If Z < -999 Then Z = -999
  83. If Z > 999 Then Z = 999
  84. Z = Z + 1000
  85. Z = 2000 - Z
  86. X = (X / Z) * 1000
  87. Y = (Y / Z) * 1000
  88. TempV(a, 0) = XOrigin + X
  89. TempV(a, 1) = YOrigin + Y
  90. Next a
  91. End Sub
  92. Public Sub SortZ()
  93. Dim Z1 As Double, Z2 As Double, ZMin As Double, ZMax As Double
  94. Dim a, Dummy As Double, Sw
  95. For a = 0 To LineNum
  96. Z1 = TempV(Lin(a, 0), 2)
  97. Z2 = TempV(Lin(a, 1), 2)
  98. If Z1 < Z2 Then ZMin = Z1: ZMax = Z2
  99. If Z1 > Z2 Then ZMin = Z2: ZMax = Z1
  100. If Z1 = Z2 Then ZMin = Z1: ZMax = Z2
  101. ZCenter(a) = (ZMax - ZMin) / 2
  102. ZCenter(a) = ZMin + ZCenter(a)
  103. Next a
  104. Dim b
  105. ZStart:
  106. Sw = 0
  107. For a = 0 To LineNum - 1
  108. If ZCenter(a) > ZCenter(a + 1) Then
  109. For b = 0 To 4
  110. Dummy = Lin(a, b): Lin(a, b) = Lin(a + 1, b): Lin(a + 1, b) = Dummy
  111. Next b
  112. Dummy = ZCenter(a): ZCenter(a) = ZCenter(a + 1): ZCenter(a + 1) = Dummy
  113. Sw = 1
  114. End If
  115. Next a
  116. If Sw <> 0 Then GoTo ZStart
  117. End Sub
  118. Public Sub ImageView()
  119. Dim Aa, Bb
  120. Dim X1 As Double, Y1 As Double, Z1 As Double
  121. Dim X2 As Double, Y2 As Double, Z2 As Double
  122. Dim C1, C2, C3
  123. Dim a
  124. View.Display.Cls
  125. For a = 0 To LineNum
  126. Aa = Lin(a, 0): Bb = Lin(a, 1)
  127. X1 = TempV(Aa, 0): Y1 = TempV(Aa, 1): Z1 = TempV(Aa, 2)
  128. X2 = TempV(Bb, 0): Y2 = TempV(Bb, 1): Z2 = TempV(Bb, 2)
  129. If Z1 > ViewDis And Z2 > ViewDis Then GoTo Skip
  130. C1 = Lin(a, 2): C2 = Lin(a, 3): C3 = Lin(a, 4)
  131. View.Display.Line (X1, Y1)-(X2, Y2), RGB(C1, C2, C3)
  132. Skip:
  133. Next a
  134.  
  135.  
  136.  
  137. End Sub
  138.